// 给定一个m*n的二维矩阵，matrix，按照顺时针旋转的顺序，返回矩阵中的所有元素

// 思路：首先定义上下左右的边界变量，每个方向遍历完成后动态改变边界值，直到边界重合

function spiralOrder(matrix) {
    let top = 0
    let bottom = matrix.length - 1
    let left = 0
    let right = matrix[0].length - 1
    let ans = []
    while (true) {
        for (let i = left; i <= right ; i++) {
            ans.push(matrix[top][i])
        }
        top++
        if (top > bottom) {
            break
        }
        for (let i = top; i <= bottom ; i++) {
            ans.push(matrix[i][right])
        }
        right--
        // 这里right变了，所以得判断right < left
        if (right < left) {
            break
        }
        for (let i = right; i >= left ; i--) {
            ans.push(matrix[bottom][i])
        }
        bottom--
        // 这里bottom变小了，所以判断bottom < top
        if (bottom < top) {
            break
        }
        for (let i = bottom; i >= top ; i--) {
            ans.push(matrix[i][left])
        }
        left++
        if (left > right) {
            break
        }
    }
    return ans
}

// 时间复杂度为Om*n，m和n分别为二维矩阵的行和列数
// 空间复杂度为Om*n
let matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
console.log(spiralOrder(matrix));

